home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / system-config-printer / troubleshoot / PrinterStateReasons.py < prev    next >
Text File  |  2009-10-19  |  4KB  |  117 lines

  1. #!/usr/bin/env python
  2.  
  3. ## Printing troubleshooter
  4.  
  5. ## Copyright (C) 2008, 2009 Red Hat, Inc.
  6. ## Copyright (C) 2008, 2009 Tim Waugh <twaugh@redhat.com>
  7.  
  8. ## This program is free software; you can redistribute it and/or modify
  9. ## it under the terms of the GNU General Public License as published by
  10. ## the Free Software Foundation; either version 2 of the License, or
  11. ## (at your option) any later version.
  12.  
  13. ## This program is distributed in the hope that it will be useful,
  14. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. ## GNU General Public License for more details.
  17.  
  18. ## You should have received a copy of the GNU General Public License
  19. ## along with this program; if not, write to the Free Software
  20. ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22. import cups
  23. import statereason
  24. from timedops import TimedOperation
  25. from base import *
  26. class PrinterStateReasons(Question):
  27.     def __init__ (self, troubleshooter):
  28.         Question.__init__ (self, troubleshooter, "Printer state reasons")
  29.         page = self.initial_vbox (_("Status Messages"),
  30.                                   _("There are status messages associated with "
  31.                                     "this queue."))
  32.         self.label = gtk.Label ()
  33.         self.label.set_alignment (0, 0)
  34.         self.label.set_line_wrap (True)
  35.         page.pack_start (self.label, False, False, 0)
  36.  
  37.         troubleshooter.new_page (page, self)
  38.  
  39.     def display (self):
  40.         troubleshooter = self.troubleshooter
  41.         try:
  42.             queue = troubleshooter.answers['cups_queue']
  43.         except KeyError:
  44.             return False
  45.  
  46.         parent = self.troubleshooter.get_window ()
  47.         cups.setServer ('')
  48.         self.op = TimedOperation (cups.Connection, parent=parent)
  49.         c = self.op.run ()
  50.         self.op = TimedOperation (c.getPrinterAttributes,
  51.                                   args=(queue,),
  52.                                   parent=parent)
  53.         dict = self.op.run ()
  54.  
  55.         text = ''
  56.         state_message = dict['printer-state-message']
  57.         if state_message:
  58.             text += _("The printer's state message is: '%s'.") % state_message
  59.             text += '\n\n'
  60.  
  61.         state_reasons_list = dict['printer-state-reasons']
  62.         if type (state_reasons_list) == unicode:
  63.             state_reasons_list = [state_reasons_list]
  64.  
  65.         self.state_message = state_message
  66.         self.state_reasons = state_reasons_list
  67.  
  68.         human_readable_errors = []
  69.         human_readable_warnings = []
  70.         for reason in state_reasons_list:
  71.             if reason == "none":
  72.                 continue
  73.  
  74.             r = statereason.StateReason (queue, reason)
  75.             (title, description) = r.get_description ()
  76.             level = r.get_level ()
  77.             if level == statereason.StateReason.ERROR:
  78.                 human_readable_errors.append (description)
  79.             elif level == statereason.StateReason.WARNING:
  80.                 human_readable_warnings.append (description)
  81.  
  82.         if human_readable_errors:
  83.             text += _("Errors are listed below:") + '\n'
  84.             text += reduce (lambda x, y: x + "\n" + y, human_readable_errors)
  85.             text += '\n\n'
  86.  
  87.         if human_readable_warnings:
  88.             text += _("Warnings are listed below:") + '\n'
  89.             text += reduce (lambda x, y: x + "\n" + y, human_readable_warnings)
  90.  
  91.         self.label.set_text (text)
  92.         if (state_message == '' and
  93.             len (human_readable_errors) == 0 and
  94.             len (human_readable_warnings) == 0):
  95.             return False
  96.  
  97.         # If this screen has been show before, don't show it again if
  98.         # nothing changed.
  99.         if troubleshooter.answers.has_key ('printer-state-message'):
  100.             if (troubleshooter.answers['printer-state-message'] ==
  101.                 self.state_message and
  102.                 troubleshooter.answers['printer-state-reasons'] ==
  103.                 self.state_reasons):
  104.                 return False
  105.  
  106.         return True
  107.  
  108.     def collect_answer (self):
  109.         if not self.displayed:
  110.             return {}
  111.  
  112.         return { 'printer-state-message': self.state_message,
  113.                  'printer-state-reasons': self.state_reasons }
  114.  
  115.     def cancel_operation (self):
  116.         self.op.cancel ()
  117.